/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Usuarios;

/**
 *
 * @author humberto
 */

import Utilidades.imagenUtils;
import Utilidades.resaltadores;
import Utilidades.utils;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;


/**
 *
 * @author alrojas
 */
public final class guiAgregarUsuario extends JFrame
{

    private static guiAgregarUsuario identidad;
    private static guiAgregarUsuario instancia=null;
    
    private GridBagLayout layout;

    private JLabel lDni;

    private JLabel lPnombre;
    private JLabel lSnombre;

    private JLabel lPapellido;
    private JLabel lSapellido;

    private JLabel lTipo;

    private JLabel lUsuario;
    private JLabel lCpassword;
    private JLabel lPassword;
   

    private JButton bFoto;
    
    private ImageIcon imagen;
    private boolean cambioImagen;
    
    private JTextField tDni;

    private JTextField tPnombre;
    private JTextField tSnombre;

    private JTextField tPapellido;
    private JTextField tSapellido;
    
    private String[] opTipo;
    private JComboBox cTipo;
    
    private JTextField tUsuario;
    private JPasswordField tPassword;
    private JPasswordField tCpassword;
    
      
    private JButton bAceptar;
    private JButton bCancelar;
    

    private guiPrincipalUsuarios padre;
    private cUsuario usuario;
    
    private JFileChooser selector;

    private guiAgregarUsuario(guiPrincipalUsuarios padre)
    {
       // super("Agregar Nuevo Objeto",false,true,true,true);
        identidad=this;
        this.padre=padre;
        this.cambioImagen = false;
        
        this.setTitle("Agregue datos del nuevo Usuario");
        layout = new GridBagLayout();
        this.setLayout(layout);
            
        inicializarComponentes();
        agregarComponentes();
        
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);
        agregarListeners();
        this.tDni.requestFocus();      

    }

    public static guiAgregarUsuario obtenerInstancia(guiPrincipalUsuarios padre){
        
        if(instancia==null){
            instancia=new guiAgregarUsuario(padre);
            utils.ocultarVentana(padre);
            return instancia;
        }
        utils.mostrarVentana(identidad);
        utils.ocultarVentana(padre);
        return instancia;

    }

    public void inicializarComponentes()
    {
        java.awt.Font fuente =  new java.awt.Font("Arial", 1, 17);
        
        lDni = new JLabel("DNI:");
        lDni.setFont(fuente);
        
        lPnombre = new JLabel("Pr. Nombre");
        lPnombre.setFont(fuente);
       
        lSnombre = new JLabel("Sg. Nombre");
        lSnombre.setFont(fuente);
        
        lPapellido = new JLabel("Pr. Apellido");
        lPapellido.setFont(fuente);
        
        lSapellido = new JLabel("Sg. Apellido");
        lSapellido.setFont(fuente);
        
        
        lTipo = new JLabel("Tipo:");
        lTipo.setFont(fuente);
        
        lUsuario = new JLabel("Usuario:");
        lUsuario.setFont(fuente);

        lPassword = new JLabel("Password:");
        lPassword.setFont(fuente);
        
        lCpassword = new JLabel("Conf. Password:");
        lCpassword.setFont(fuente);
      
        imagen = new ImageIcon("./fotosUsuarios/addUser.png");
        
        bFoto=new JButton(imagen);
        
        fuente =  new java.awt.Font("Arial", 0, 15);
        
        tDni = new JTextField(12);
        tDni.setFont(fuente);
        
        tPnombre = new JTextField(12);
        tPnombre.setFont(fuente);
        
        tSnombre = new JTextField(12);
        tSnombre.setFont(fuente);
        
        tPapellido = new JTextField(12);
        tPapellido.setFont(fuente);
        
        tSapellido= new JTextField(12);
        tSapellido.setFont(fuente);
        
        opTipo=new String[3];
        opTipo [0]=("administrador");
        opTipo [1]=("encargado");
        opTipo [2]=("operario");
        cTipo = new JComboBox(opTipo);
        cTipo.setFont(fuente);
        
        
        tUsuario= new JTextField(12);
        tUsuario.setFont(fuente);
        
        tPassword= new JPasswordField(12);
        tPassword.setFont(fuente);
        
        tCpassword= new JPasswordField(12);
        tCpassword.setFont(fuente);
        
       
        bAceptar = new JButton("Agregar!", new ImageIcon("figuras/add32.png"));
        bAceptar.setHorizontalTextPosition(SwingConstants.RIGHT);
        bAceptar.setVerticalTextPosition(SwingConstants.CENTER) ;
        bAceptar.setVerticalAlignment(SwingConstants.CENTER); 
        
        bCancelar = new JButton("Cancelar",new ImageIcon("figuras/delete32.png"));
        bCancelar.setHorizontalTextPosition(SwingConstants.RIGHT);
        bCancelar.setVerticalTextPosition(SwingConstants.CENTER) ;
        bCancelar.setVerticalAlignment(SwingConstants.CENTER);
            
       
        
        selector = new JFileChooser();

    }

    public void agregarComponentes()
    {
        GridBagConstraints restricciones = new GridBagConstraints();


        restricciones.insets=new Insets(10,0,2,20);
        restricciones.anchor = GridBagConstraints.WEST;

        //DNI
        restricciones.gridx = 2;
        restricciones.gridy = 0;
        this.add(lDni,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 0;
        this.add(tDni,restricciones);
        //Primer Nombre
        restricciones.insets=new Insets(3,0,2,20);
        restricciones.gridx = 2;
        restricciones.gridy = 1;
        this.add(lPnombre,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 1;
        this.add(tPnombre,restricciones);
        //Segundo Nombre
        restricciones.gridx = 2;
        restricciones.gridy = 2;
        this.add(lSnombre,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 2;
        this.add(tSnombre,restricciones);
        //Primer Apellido
        restricciones.gridx = 2;
        restricciones.gridy = 3;
        this.add(lPapellido,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 3;
        this.add(tPapellido,restricciones);
        //Segundo Apellido
        restricciones.gridx = 2;
        restricciones.gridy = 4;
        this.add(lSapellido,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 4;
        this.add(tSapellido,restricciones);
        //Tipo
        restricciones.gridx = 2;
        restricciones.gridy = 5;
        this.add(lTipo,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 5;
        this.add(cTipo,restricciones);
        //Usuario
        restricciones.gridx = 2;
        restricciones.gridy = 6;
        this.add(lUsuario,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 6;
        this.add(tUsuario,restricciones);
        //Password
        restricciones.gridx = 2;
        restricciones.gridy = 7;
        this.add(lPassword,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 7;
        this.add(tPassword,restricciones);
        //Conf. Password
        restricciones.gridx = 2;
        restricciones.gridy = 8;
        this.add(lCpassword,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 8;
        this.add(tCpassword,restricciones);
       
        //FOTO
        restricciones.gridx = 0;
        restricciones.gridy = 0;
        restricciones.insets=new Insets(2,20,0,20);
        restricciones.gridheight=9;restricciones.gridwidth=2;
        this.add(bFoto,restricciones);
        
        //Botones
        
        restricciones.gridx = 0;
        restricciones.gridy = 9;
        restricciones.gridheight=1;restricciones.gridwidth=1;
        restricciones.insets=new Insets(-15,27,10,0);
        this.add(bAceptar,restricciones);

        restricciones.gridx = 1;
        restricciones.gridy = 9;
        this.add(bCancelar,restricciones);
        

        


    }
    
     public boolean revisarCampos(){
     
         boolean flag = true ;
         
         //PARA EL DNI
      
         if(tDni.getText().length()!=8){
             JOptionPane.showMessageDialog(null, "DNI debe tener 8 Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                          resaltadores.resaltadorJtextfield(tDni);tDni.requestFocus();
             flag = false; return flag;
         }
         
         else if(!utils.verificarInteger(tDni.getText())){
             JOptionPane.showMessageDialog(null, "DNI no debe contener Letras",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tDni);tDni.requestFocus();
             flag = false; return flag;
         }
         
         
         //PARA EL PRIMER NOMBRE

         
         else if(utils.verificarEspacioVacio(tPnombre.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Primer Nombre",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPnombre);tPnombre.requestFocus();
             flag = false; return flag;
         }
         
         else if(!utils.verificarString(tPnombre.getText())){
             JOptionPane.showMessageDialog(null, "Primer Nombre no debe contener Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPnombre);tPnombre.requestFocus();
             flag = false; return flag;
         }
         
        
         //PARA EL SEGUNDO NOMBRE

         
         else if((!utils.verificarString(tSnombre.getText()))&&(!tSnombre.getText().isEmpty())){
             JOptionPane.showMessageDialog(null, "Segundo Nombre no debe contener Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tSnombre);tSnombre.requestFocus();
             flag = false; return flag;
         }
         
         //PARA EL PRIMER APELLIDO 

         
         else if(utils.verificarEspacioVacio(tPapellido.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Primer Apellido",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPapellido);tPapellido.requestFocus();
             flag = false; return flag;
         }
         
         else if(!utils.verificarString(tPapellido.getText())){
             JOptionPane.showMessageDialog(null, "Primer Apellido no debe contener Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPapellido);tPapellido.requestFocus();
             flag = false; return flag;
         }
         
         //PARA EL SEGUNDO APELLIDO 

         
         else if((!utils.verificarString(tSapellido.getText()))&&(!tSnombre.getText().isEmpty())){
             JOptionPane.showMessageDialog(null, "Segundo Apellido no debe contener Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tSapellido);tSapellido.requestFocus();
             flag = false; return flag;
         }
         
         //PARA EL USUARIO
         
          else if(utils.verificarEspacioVacio(tUsuario.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Dirección",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tUsuario);tUsuario.requestFocus();
             flag = false; return flag;
         }
          
          //PARA EL PASSWORD
         
        else if(utils.verificarEspacioVacio(tUsuario.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Usuario",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPassword);tPassword.requestFocus();
             flag = false;
         }
        
        
         else if(utils.verificarEspacioVacio(tPassword.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Password",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPassword);tPassword.requestFocus();
             
             flag = false;
         }
         else if(!String.valueOf(tPassword.getPassword()).
                 equals(String.valueOf(tCpassword.getPassword()))){
             
             
             JOptionPane.showMessageDialog(null, "Acaso los pass ingresados son diferentes?",
                        "Error en Password",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPassword);tPassword.requestFocus();
             flag = false;
         }
         
         else if(cambioImagen==false)
         {
             int confirmado = JOptionPane.showConfirmDialog(null, "Seguro que desea Agregar al usuario SIN Imagen?");
                     if (JOptionPane.NO_OPTION == confirmado){flag =false; return flag;}
         }
         
             
         
         return flag;
        
        
        
             
   }

     public  void cerrar()
     {
         utils.ocultarVentana(identidad);
         utils.mostrarVentana(padre);

     }
     
     public void limpiar(){
     
         tDni.setText("");
         tPnombre.setText("");
         tSnombre.setText("");
         tPapellido.setText("");
         tSapellido.setText("");
         tUsuario.setText("");
         tPassword.setText("");
         tCpassword.setText("");
         
     }
     
     public void crearAgregarUsuario(){
         
     usuario = new cUsuario(
                    tDni.getText(), 
                    tPnombre.getText(), 
                    tSnombre.getText(), 
                    tPapellido.getText(), 
                    tSapellido.getText(), 
                    cTipo.getSelectedItem().toString(),
                    tUsuario.getText(),
                    String.valueOf(tPassword.getPassword()).trim());
                    
                            
     
        if(cambioImagen==true)
         imagenUtils.guardarFoto("./fotosClientes/",imagen,usuario.getDni()+"C");
            
            if(usuario.agregarUsuario()){ 
                JOptionPane.showMessageDialog(null, "USUARIO AGREGADO :D",
                        "Felicidades!",
                            JOptionPane.INFORMATION_MESSAGE);
                this.setVisible(false);
                try {
                    padre.actualizarData();
                } catch (SQLException ex) {
                    Logger.getLogger(guiAgregarUsuario.class.getName()).log(Level.SEVERE, null, ex);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(guiAgregarUsuario.class.getName()).log(Level.SEVERE, null, ex);
                }
                }
     }
     

     private void agregarListeners() 
     {
         
         //Listeneer Para Los TextFields
         
       tDni.addKeyListener(new resaltadores.resaltadorInteger(this.tDni));
       tDni.addFocusListener(new resaltadores.enfocador(this.tDni, true));
       
       tPnombre.addKeyListener(new resaltadores.resaltadorString(this.tPnombre));
       tPnombre.addFocusListener(new resaltadores.enfocador(this.tPnombre, true));
       
       tSnombre.addKeyListener(new resaltadores.resaltadorString(this.tSnombre));
       tSnombre.addFocusListener(new resaltadores.enfocador(this.tSnombre, true));
       
       tPapellido.addKeyListener(new resaltadores.resaltadorString(this.tPapellido));
       tPapellido.addFocusListener(new resaltadores.enfocador(this.tPapellido, true));
       
       tSapellido.addKeyListener(new resaltadores.resaltadorString(this.tSapellido));
       tSapellido.addFocusListener(new resaltadores.enfocador(this.tSapellido, true));
                          
         //Listener Para Los Botones
       //LISTENER PARA EL BOTON ACEPTAR
         Action actEnter = new AbstractAction() {    
      
         public void actionPerformed(ActionEvent e) {
            bAceptar.doClick();}
          };
         
         bAceptar.addActionListener(new ActionListener() {

            
        public void actionPerformed(ActionEvent e) {
            if(revisarCampos()){crearAgregarUsuario();/*TODOOOOO*/}
        }
        });
        
         bAceptar.getInputMap(bAceptar.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ENTER"),"accion");
         bAceptar.getActionMap().put("accion", actEnter);
         
         //Listener del Boton Cancelar
         
         Action actEsc = new AbstractAction() { public void actionPerformed(ActionEvent e) {cerrar();}};
         
         bCancelar.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {cerrar();}});
        
         bCancelar.getInputMap(bCancelar.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"),"accion");
         bCancelar.getActionMap().put("accion", actEsc);
         
        //Listener del Boton de la Foto
         
         bFoto.addActionListener(new ActionListener() {

            
            public void actionPerformed(ActionEvent e) {
                selector.showOpenDialog(getParent());
                try{
                actualizarFoto(selector.getSelectedFile().getAbsoluteFile().toString());    
                }catch(NullPointerException exp){}
            }
        });
    }
     
        public void actualizarFoto(final String figura){
        
         try {
             imagen=new ImageIcon(figura); 
             if(imagenUtils.esImagenAdecuada(imagen)){
                
                bFoto.setIcon(imagen);
                identidad.pack();
                this.cambioImagen=true;
             }
             
             else{
                imagen=imagenUtils.escalaImagenGrande(imagen);
                bFoto.setIcon(imagen);
                identidad.pack();
                this.cambioImagen=true;
             }
         } catch (NullPointerException e) {
         }             
    }
        
        
     
}

